package effectiveJava;

import org.junit.Test;

import java.text.Collator;
import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * Created by dongyuncong on 2017/7/31.
 */
public class ChinaSort {

    @Test
    public void test() {
        String[] strs = {"张三", "李四", "王五"};

        Arrays.sort(strs);
        Arrays.stream(strs).forEach(o -> System.out.println(o));

        Comparator c = Collator.getInstance(Locale.CHINA);
        Arrays.sort(strs, c);
        Arrays.stream(strs).forEach(o -> System.out.println(o));
        // TODO: 2017/7/31 Arrays.sort()排序方法对于非英文的String可能会出现不准确的地方，此时java推荐使用 Collator 实现排序， 不过由于字符集的限制 
        // TODO: 2017/7/31 Collator 会有一些字符不再其字符集，所以一些不常用的字符仍会出错，此时可以利用一些开源项目，例如将汉字转拼音的 pinyin4j
    }

    @Test
    public void test1() {
        // TODO: 2017/7/31 集合仅仅支持对象，所以用集合操作基本类型装拆箱过程浪费资源,所以处理基本数据用数组！！！

        Integer[] array=  Stream.generate(()-> new Random().nextInt()).limit(35000).toArray(Integer[]::new);
        int[] ints =new int[35000];
        for (int i=0;i<35000;i++){
            ints[i]=array[i].intValue();
        }

        long t = System.currentTimeMillis();
        long total=0;
        for (int i:ints){
            total+=i;
        }
        System.out.println(System.currentTimeMillis()-t);
        System.out.println(total);

        t = System.currentTimeMillis();
        total=0;
        List<Integer>list= Arrays.stream(ints).boxed().collect(Collectors.toList());
        for (Integer i:list){
            total+=i;
        }
        System.out.println(System.currentTimeMillis()-t);
        System.out.println(total);
// TODO: 2017/7/31 对基本类型进行求和运算时，数组是集合的 10+ 倍 
    }
}
